package com.unitd.frame.sso.web.tag;

import com.unitd.frame.sso.common.helper.SSOHelper;
import com.unitd.frame.sso.common.config.SSOConfig;
import com.unitd.frame.sso.common.token.SSOToken;
import com.unitd.frame.comm.utils.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 * @desc 用户不自定的JSP 权限判断标签类
 * JSP页面使用此标签时,需要在文件头部引入相应的tag;
 * 具体引用为:
 * <%@ taglib prefix="sso" uri="http://www.unitd.com/tags"%>
 * 具体用法为:
 * <sso:hasPermission name="需要验证的内容">判断内容<sso:hasPermission>
 * @filename HasPermissionTag.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2016/10/14
 */
public class HasPermissionTag extends BodyTagSupport {

	private String name; 								// 权限码名称

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int doStartTag() throws JspException {
		// 在标签开始处出发该方法
		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
		SSOToken token = SSOHelper.getToken(request);

		// 如果 token 或者 name 为空
		if (token != null && StringUtils.isNotBlank(name)) {
			boolean result = SSOConfig.getInstance().getAuthorization().isPermitted(token, name);
			if (result) {
				// 权限验证通过
				// 返回此则执行标签body中内容,SKIP_BODY则不执行
				return BodyTagSupport.EVAL_BODY_INCLUDE;
			}
		}
		return BodyTagSupport.SKIP_BODY;
	}
}